/* ===================

AX2E (AXESCON XACML 2.0 Engine) is the Java authorization engine, which implements OASIS XACML 2.0 standard.
Copyright (C) 2007 AXESCON LLC

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA


Contact: AXESCON LLC - info{at}axescon.com

 =================== */
package axescon.xacml.api;

import axescon.xacml.model.ctx.Status;
import axescon.xacml.model.ctx.StatusCode;
import axescon.xacml.model.ctx.impl.StatusImpl;


/**
 * @author argyn
 *         Date: Jun 26, 2005
 *         Time: 12:41:44 PM
 *         Responsibilities: indicates Indeterminate evaluation result of a condition,
 *         see ch. 7.8. Condition evaluation
 *         and ch. 7.3. Expression evaluation
 */
public class ExpressionEvalIndeterminateException extends XacmlException {

    public ExpressionEvalIndeterminateException(String msg) {
        super(msg);
        try {
            status = new StatusImpl(StatusCode.STRING_PROCESSING_ERR);
        } catch (XacmlException ignore) {
        }
    }

    public ExpressionEvalIndeterminateException() {
        try {
            status = new StatusImpl(StatusCode.STRING_PROCESSING_ERR);
        } catch (XacmlException ignore) {
        }
    }

    public ExpressionEvalIndeterminateException(String s, int errCode) {
        super(s, errCode);
        try {
            status = new StatusImpl(StatusCode.STRING_PROCESSING_ERR);
        } catch (XacmlException ignore) {
        }
    }

    public ExpressionEvalIndeterminateException(String message, Throwable cause) {
        super(message, cause);
        try {
            status = new StatusImpl(StatusCode.STRING_PROCESSING_ERR);
        } catch (XacmlException ignore) {
        }
    }

    public ExpressionEvalIndeterminateException(String message, int errCode, Throwable cause) {
        super(message, cause);
        setErrCode(errCode);
        try {
            status = new StatusImpl(StatusCode.STRING_PROCESSING_ERR);
        } catch (XacmlException ignore) {
        }
    }

    public ExpressionEvalIndeterminateException(Throwable cause) {
        super(cause);
        try {
            status = new StatusImpl(StatusCode.STRING_PROCESSING_ERR);
        } catch (XacmlException ignore) {
        }
    }

    /**
     * status of result
     */
    private Status status;

    /**
     * gets status of result
     * @return status
     */
    public Status getStatus() {
        return status;
    }

    /**
     * sets status
     * @param status result status
     */
    public void setStatus(Status status) {
        this.status = status;
    }

    /**
     * get id of rule which caused this exception
     * @return rule id
     */
    public String getRuleId() {
        return ruleId;
    }


    /**
     * set rule id
     * @param ruleId
     * @return this exception reference
     */
    public ExpressionEvalIndeterminateException setRuleId(String ruleId) {
        this.ruleId = ruleId;
        return this;
    }

    /**
     * id of rule, which execution caused this exception
     */
    private String ruleId;

    public String toString() {
        String ret = getClass().getName()
                + (getRuleId() != null ? ", RuleId = " + getRuleId() : "")
                + ", ErrCode = " + getErrCode()
                + ", Message = " + getMessage();
        return ret;
    }
}
